/*
    分配小车具体实现。
    因为之前用的结构体数组记录小车和学生信息，所以匹配小车和学生，只需要匹配两组下标，也就是[1,10]->[1,10]映射
*/
#include "../include/allocate.h"
#include <iostream>
#include <random>
#include <vector>
#include <algorithm>  

std::map<int, int> allocate(const int num)
{
    // map[小车下标] = 学生下标
    std::map<int,int> carToStu;
    std::random_device rd;
    std::mt19937 gen(rd());
    // 生成一个长度为num的vector，
    std::vector<int> b(num);
    for (int i = 0; i < num; i++)
    {
        b[i] = i;
    }
    // 洗牌
    std::shuffle(b.begin(), b.end(), gen);
    // 随机匹配的结果。让0到10下标的小车，依次对应一个随机的学生。
    for (int i = 0; i < num; i++) {  
        carToStu[i] = b[i];
    }  
    return carToStu;
}